# -*-coding: Utf-8 -*-
# @File : common_interface .py
# author: Chimengmeng
# blog_url : https://www.cnblogs.com/dream-ze/
# Time：2023/6/14
'''
公共方法接口
'''
import os, sys
from conf import settings
from db import models
from lib import common
from conf import settings

logger_common = settings.get_logger('common')


# 获取所有学校名称接口
def get_all_school_interface():
    # （1） 获取学校文件夹路径
    SCHOOL_DIR = os.path.join(settings.DB_PATH, 'School')

    # （2）判断学校文件夹是否存在
    if not os.path.exists(SCHOOL_DIR):
        flow = f'当前无学校存在!请先联系管理员创建学校!'
        logger_common.warning(flow)
        return False, flow

    # （3） 文件夹路径存在则获取文件夹中所有文件的名字
    school_list = os.listdir(SCHOOL_DIR)
    return True, school_list


# 公共登录接口  -- 根据类的不同区分不同角色调用不同的接口进行登陆
def login_interface_roles(username, password, login_random_code, login_input_code, roles):
    '''

    :param username: 传入的用户名
    :param password: 传入的密码
    :param login_random_code: 传入的随机4位登陆验证码
    :param login_input_code: 传入的输入的随机4位登陆验证码
    :param roles: 角色判断
    :return: 返回状态码
    '''

    # 初识化 角色对象为空对象
    # obj_roles = None
    if roles == 'admin':
        # (1)  判断用户是否存在 -- 创建管理员公共对象
        obj_roles = models.Admin.select(username)
    elif roles == 'student':
        # (1)  判断用户是否存在 -- 创建学生公共对象
        obj_roles = models.Student.select(username)
    elif roles == 'teacher':
        # (1)  判断用户是否存在 -- 创建讲师公共对象
        obj_roles = models.Teacher.select(username)
    else:
        flow = f'请确认你的角色信息!!!'
        logger_common.warning(flow)
        return False, flow
    # 如果用户存在则尽心登陆验证操作
    if obj_roles:
        encrypted_password = common.encrypt_decrypt(obj_roles.salt + password)

        # （3）若用户存在，则校验密码
        if encrypted_password == obj_roles.password and login_random_code.upper() == login_input_code.upper():
            flow = f'当前用户{roles}:>>{username}登陆成功!!欢迎回家!!'
            logger_common.info(flow)
            return True, flow

        else:
            flow = f'当前用户{roles}:>>{username},请校验你的用户名或密码和验证码'
            logger_common.warning(flow)
        return False, flow
    # （2）若用户不存在则返回结果并反馈提示语给视图层
    else:
        flow = f'当前用户{roles}:>>{username}不存在,请重新登陆!!'
        logger_common.warning(flow)
        return False, flow


# 获取指定学校内的所有课程列表
def get_all_course_from_school_interface(school_name):
    # (1)获取学校对象
    school_obj = models.School.select(school_name)

    # (2)获取学校里面的所有课程
    courses_list_from_school = school_obj.courses_list
    # 无开设课程
    if not courses_list_from_school:
        flow = f'该学校没有开设任何课程!!!'
        logger_common.warning(flow)
        return False, flow
    # 有开设课程
    return True, courses_list_from_school
